home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / netdlg / netdlgs.pas < prev   
Pascal/Delphi Source File  |  1996-04-08  |  9KB  |  314 lines

  1. { Written by; Steve Trefethen
  2.  
  3. The following is a set of Delphi components to access (at least some of)
  4. the networking dialogs that are build into WFW.  These components
  5. provide access to both network drives and printers.
  6.  
  7. This file is provided "as is" without and warranty either expressed
  8. or implied.  These components have been tested only on WFW 3.11.
  9.  
  10. These components may be distributed freely.  If you add to them or
  11. enhance them I would appreciate it if you could send me a copy.
  12.  
  13. Enjoy!
  14.  
  15. }
  16. unit NetDlgs;
  17.  
  18. interface
  19.  
  20. uses
  21.   SysUtils, WinTypes, WinProcs, Classes, Forms;
  22.  
  23. type
  24.  
  25.   { TNetServerBrowseDialog }
  26.  
  27.   TNetServerBrowseDialog = class(TComponent)
  28.   private
  29.     FLocalName,
  30.     FConnectName: PChar;
  31.     NetDriver: THandle;
  32.     WNETSERVERBROWSEDIALOG : Function(hwndParent : hWnd; lpszSectionName, lpszBuffer : PChar;
  33.                                       cbBuffer : Word; dlFlags : LongInt) : Word;
  34.     function GetLocalName: String;
  35.     function GetConnectName: String;
  36.   public
  37.     constructor Create(AOwner: TComponent); override;
  38.     destructor Destroy; override;
  39.     function Execute: Boolean;
  40.     property LocalName: String read GetLocalName;
  41.     property ConnectName: String read GetConnectName;
  42.   end;
  43.  
  44.   { TNetShareDialog }
  45.  
  46.   TNetShareDialog = class(TComponent)
  47.   private
  48.     FPrinter: Boolean;
  49.     FPathName: PChar;
  50.     NetDriver: THandle;
  51.     function GetPathName: String;
  52.     procedure SetPathName(Value: String);
  53.   public
  54.     constructor Create(AOwner: TComponent); override;
  55.     destructor Destroy; override;
  56.     function Execute: Boolean; virtual; abstract;
  57.   published
  58.     property PathName: String read GetPathName write SetPathName;
  59.     property Printer: Boolean read FPrinter write FPrinter;
  60.   end;
  61.  
  62.   { TNetShareAsDialog }
  63.  
  64.   TNetShareAsDialog = class(TNetShareDialog)
  65.   private
  66.     WNETSHAREASDIALOG : Function(hwndParent : HWND; iType : Word; lpszPath : PChar) : Word;
  67.   public
  68.     function Execute: Boolean; virtual;
  69.   end;
  70.  
  71.   { TNetStopShareDialog }
  72.  
  73.   TNetStopShareDialog = class(TNetShareDialog)
  74.   private
  75.     WNETSTOPSHAREDIALOG : Function(hwndParent : Hwnd; iType : Word; lpszPath : PChar) : Word;
  76.   public
  77.     function Execute: Boolean;
  78.   end;
  79.  
  80.   { TNetConnectDialog }
  81.  
  82.   TNetConnectDialog = class(TComponent)
  83.   private
  84.     FPrinter: Boolean;
  85.     NetDriver: THandle;
  86.     CONNECTDIALOG : Function(hwndParent : hWnd; iType : Word) : Word;
  87.   public
  88.     function Execute: Boolean;
  89.   published
  90.     property Printer: Boolean read FPrinter write FPrinter;
  91.   end;
  92.  
  93. procedure Register;
  94. Function NDdeGetNodeName(lpszNodeName : PChar; cchNodeName : LongInt) : Word;
  95.  
  96. implementation
  97.  
  98. const
  99.   StringSize = 255;
  100.   C_WNetShareAsDialog      = 141;
  101.   C_WNetStopShareDialog    = 142;
  102.   C_WNetServerBrowseDialog = 146;
  103.   C_I_CONNECTIONDIALOG     = 533;
  104.  
  105. function CheckNetDriver: THandle;
  106. const
  107.   User = 'USER';
  108. var
  109.   UserHandle: THandle;
  110.   WNetGetCaps: function (Flags: Word): Word;
  111.   Handle: hWnd;
  112. begin
  113.   Result := 0;
  114.   UserHandle := GetModuleHandle(User);
  115.   if UserHandle <> 0 then begin
  116.     @WNetGetCaps := GetProcAddress(UserHandle, 'WNETGETCAPS');
  117.     if @WNetGetCaps <> nil then
  118.       Result := WNetGetCaps(Word(-1))
  119.     else
  120.       raise Exception.Create('GetProcAddress failed');
  121.   end else
  122.     raise Exception.Create('GetModuleHandle failed');
  123. end;
  124.  
  125. { TNetServerBrowseDialog }
  126.  
  127. constructor TNetServerBrowseDialog.Create(AOwner: TComponent);
  128. var
  129.   S: String;
  130. begin
  131.   inherited Create(AOwner);
  132.   FLocalName := nil;
  133.   FConnectName := nil;
  134.   NetDriver := 0;
  135. end;
  136.  
  137. destructor TNetServerBrowseDialog.Destroy;
  138. begin
  139.   StrDispose(FLocalName);
  140.   StrDispose(FConnectName);
  141.   inherited Destroy;
  142. end;
  143.  
  144. function TNetServerBrowseDialog.Execute: Boolean;
  145. var
  146.   CConnectName,
  147.   CLocalName: array[0..StringSize + 1] of char;
  148.   Handle: hWnd;
  149. begin
  150.   { Check to see if NETDDE.EXE is loaded }
  151.   Handle := FindWindow('NetDDEMainWDW', 'NetDDE');
  152.   if Handle = 0 then
  153.   begin
  154.     Handle := WinExec('NETDDE.EXE',sw_ShowNormal);  { Attempt to load it }
  155.     if Handle < 32 then
  156.       raise Exception.Create('Unable to load Network DDE support');
  157.   end;
  158.   if Handle <> 0 then
  159.   begin
  160.     NDDEGetNodeName(CLocalName, StringSize);
  161.     { is network access enabled? }
  162.     NetDriver := CheckNetDriver;
  163.     if NetDriver <> 0 then
  164.     begin
  165.       { Then get the address of the Browse Dialog }
  166.       @WNetServerBrowseDialog := GetProcAddress(NetDriver, MakeIntResource(C_WNetServerBrowseDialog));
  167.       if Owner is TForm then
  168.         if WNetServerBrowseDialog(TForm(Owner).Handle, CLocalName,
  169.                                   CConnectName, StringSize, 0) <> 0 then
  170.           Result := False
  171.         else
  172.         begin
  173.           Result := True;
  174.           FLocalName := StrAlloc(StrLen(CLocalName)+1);
  175.           StrCopy(FLocalName, CLocalName);
  176.           FConnectName := StrAlloc(StrLen(CConnectName)+1);
  177.           StrCopy(FConnectName, CConnectName);
  178.         end
  179.       else
  180.         raise Exception.Create('Invalid dialog owner handle.  Should be a TForm');
  181.     end
  182.     else
  183.       raise Exception.Create('Net Driver handle not found');
  184.   end;
  185. end;
  186.  
  187. function TNetServerBrowseDialog.GetLocalName: String;
  188. begin
  189.   if FLocalName = nil then
  190.     Result := ''
  191.   else
  192.     Result := StrPas(FLocalName);
  193. end;
  194.  
  195. function TNetServerBrowseDialog.GetConnectName: String;
  196. begin
  197.   if FConnectName = nil then
  198.     Result := ''
  199.   else
  200.     Result := StrPas(FConnectName);
  201. end;
  202.  
  203. { TNetShareDialog }
  204.  
  205. constructor TNetShareDialog.Create(AOwner: TComponent);
  206. begin
  207.   inherited Create(AOwner);
  208.   FPathName := nil;
  209.   NetDriver := 0;
  210. end;
  211.  
  212. destructor TNetShareDialog.Destroy;
  213. begin
  214.   StrDispose(FPathName);
  215.   inherited Destroy;
  216. end;
  217.  
  218. function TNetShareDialog.GetPathName: String;
  219. begin
  220.   if FPathName = nil then
  221.     Result := ''
  222.   else
  223.     Result := StrPas(FPathName);
  224. end;
  225.  
  226. procedure TNetShareDialog.SetPathName(Value: String);
  227. begin
  228.   if FPathName <> nil then
  229.     StrDispose(FPathName);
  230.   FPathName := StrAlloc(Length(Value)+1);
  231.   StrPCopy(FPathName, Value);
  232. end;
  233.  
  234. { TNetShareAsDialog }
  235.  
  236. function TNetShareAsDialog.Execute: Boolean;
  237. begin
  238.   if FPathName = nil then
  239.     raise Exception.Create('No PathName specified');
  240.   NetDriver := CheckNetDriver;
  241.   if NetDriver <> 0 then
  242.   begin
  243.     { Then get the address of the Browse Dialog }
  244.     @WNetShareAsDialog := GetProcAddress(NetDriver, MakeIntResource(C_WNetShareAsDialog));
  245.     if Owner is TForm then
  246.     begin
  247.       if Printer then
  248.         WNetShareAsDialog(TForm(Owner).Handle, 3, FPathName)
  249.       else
  250.         WNetShareAsDialog(TForm(Owner).Handle, 1, FPathName);
  251.     end
  252.     else
  253.       raise Exception.Create('Invalid dialog owner handle.  Should be a TForm');
  254.   end
  255.   else
  256.     raise Exception.Create('Net Driver handle not found');
  257. end;
  258.  
  259. { TNetStopShareDialog }
  260.  
  261. function TNetStopShareDialog.Execute: Boolean;
  262. begin
  263.   NetDriver := CheckNetDriver;
  264.   if NetDriver <> 0 then
  265.   begin
  266.     { Then get the address of the Browse Dialog }
  267.     @WNetStopShareDialog := GetProcAddress(NetDriver, MakeIntResource(C_WNetStopShareDialog));
  268.     if (Owner is TForm) then
  269.     begin
  270.       if Printer then
  271.         WNetStopShareDialog(TForm(Owner).Handle, 3, FPathName)
  272.       else
  273.         WNetStopShareDialog(TForm(Owner).Handle, 1, FPathName);
  274.     end
  275.     else
  276.       raise Exception.Create('Invalid dialog owner handle.  Should be a TForm');
  277.   end
  278.   else
  279.     raise Exception.Create('Net Driver handle not found');
  280. end;
  281.  
  282. { TNetConnectDialog }
  283.  
  284. function TNetConnectDialog.Execute: Boolean;
  285. begin
  286.   NetDriver := CheckNetDriver;
  287.   if NetDriver <> 0 then
  288.   begin
  289.     { Then get the address of the Browse Dialog }
  290.     @ConnectDialog := GetProcAddress(NetDriver, 'WNETCONNECTDIALOG');
  291.     if Owner is TForm then
  292.     begin
  293.       if Printer then
  294.         ConnectDialog(TForm(Owner).Handle, 3)  { 1 = Drive 3 = Printer }
  295.       else
  296.         ConnectDialog(TForm(Owner).Handle, 1);
  297.     end
  298.     else
  299.       raise Exception.Create('Invalid dialog owner handle.  Should be a TForm');
  300.   end
  301.   else
  302.     raise Exception.Create('Net Driver handle not found');
  303. end;
  304.  
  305. procedure Register;
  306. begin
  307.   RegisterComponents('Dialogs', [TNetServerBrowseDialog,TNetShareAsDialog,
  308.                                  TNetStopShareDialog,TNetConnectDialog]);
  309. end;
  310.  
  311. Function NDdeGetNodeName; external 'NDDEAPI' Index 106;
  312.  
  313. end.
  314.